El análisis de regresión es un grupo de procesos estadísticos para determinar la relación entre las variables del conjunto de datos. Generalmente, el análisis de regresión se utiliza para determinar la relación entre las variables explicativas y respuesta del conjunto de datos.
El análisis de regresión ayuda a comprender cómo cambian las variables respuesta cuando una de las variables explicativas cambia y otras variables se mantienen constantes. Esto ayuda a construir un modelo de regresión y, además, ayuda a pronosticar los valores con respecto a un cambio en una de las variables explicativas.
Existen 4 tipos de técnicas de análisis de regresión:
regresión lineal,
regresión logística,
regresión logística multinomial y
regresión logística ordinal.
En este caso se concentrará la atención en el primer tipo.
Demostración
Contexto de los datos
Para este ejemplo, se usan los datos de una empresa aseguradora. Consiste en una base de datos de 1338 registros de personas (descarga de los datos).
Formato
Consiste de 7 variables:
Variable
Descripción
age
Edad del asegurado.
sex
Sexo del asegurado.
bmi
Índice de Masa Corporal de la persona.
children
Cantidad de hijos asegurados por el seguro médico.
smoker
Indicador si la persona fuma.
region
Región donde vive el asegurado en E.E.U.U.: northeast, southeast, southwest, northwest.
charges
Costos médicos individuales facturados por el seguro de salud.
Rows: 1338 Columns: 7
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (3): sex, smoker, region
dbl (4): age, bmi, children, charges
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
AED
Se realiza una AED para revisar las características de los datos a utilizar en el análisis.
Resumen estadístico
summary(insurance)
age sex bmi children
Min. :18.00 Length:1338 Min. :15.96 Min. :0.000
1st Qu.:27.00 Class :character 1st Qu.:26.30 1st Qu.:0.000
Median :39.00 Mode :character Median :30.40 Median :1.000
Mean :39.21 Mean :30.66 Mean :1.095
3rd Qu.:51.00 3rd Qu.:34.69 3rd Qu.:2.000
Max. :64.00 Max. :53.13 Max. :5.000
smoker region charges
Length:1338 Length:1338 Min. : 1122
Class :character Class :character 1st Qu.: 4740
Mode :character Mode :character Median : 9382
Mean :13270
3rd Qu.:16640
Max. :63770
Se procede a revisar la distribución de las variables edad y IMC.
Se utilizan las siguientes librerías para el análisis de regresión.
library(car) # funciones para el ajuste de modelos de regresiónlibrary(visreg) # visualiza regresioneslibrary(lmtest) # prueba modelos linealeslibrary(corrplot) # gráfico correlacioneslibrary(corrgram) # más gráficos de correlaciones
Primer modelo se trata de asociar las variables edad e IMC.
Call:
lm(formula = age ~ bmi, data = insurance)
Residuals:
Min 1Q Median 3Q Max
-26.8632 -12.5477 0.3053 11.6915 26.7248
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 31.48728 1.95884 16.074 < 2e-16 ***
bmi 0.25176 0.06266 4.018 6.19e-05 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 13.97 on 1336 degrees of freedom
Multiple R-squared: 0.01194, Adjusted R-squared: 0.0112
F-statistic: 16.15 on 1 and 1336 DF, p-value: 6.194e-05
kable(reg01$coefficients)
Tabla 1: Coeficentes de la correlación entre la edad y IMC.
x
(Intercept)
31.4872787
bmi
0.2517577
Las estimaciones para los parámetros del modelo: el valor de la intersección \(( b= 31.4872787)\) y el efecto estimado de la edad sobre el IMC \((m=0.2517577)\).
El resultados del coeficiente de correlación \(R=0.1092719\) y el coeficiente de determinación \(R^2 =0.0119403\) sugieren un asociación muy baja o nula de las variables.
Preguntas generadoras
¿Qué nos indica la baja asociación de las variables edad y imc?
¿Es posible otro tipo de relación entre otras variables?
Estratificación o niveles
La creación de estratos o niveles puede ayudar a observar patrones de asociación de variables, que de otra manera son difíciles de notar. En este caso se examina entre subconjuntos según sexo y la condición de fumador del asegurado. La asociación de variables es IMC con respecto a el costo de atención médica.
Tabla 3: Coeficientes de correlación de las variables IMC ~ costos médicos individuales agrupado por su condición de fumador y el sexo de la persona.
sex
smoker
term
estimate
std.error
statistic
p.value
female
no
(Intercept)
6407.22480
1364.35924
4.696142
0.0000034
female
no
bmi
77.11556
43.86509
1.758017
0.0793060
female
yes
(Intercept)
-14075.51629
2720.22707
-5.174390
0.0000010
female
yes
bmi
1511.55493
89.65063
16.860505
0.0000000
male
no
(Intercept)
5271.76507
1313.41927
4.013772
0.0000686
male
no
bmi
91.49778
41.84682
2.186493
0.0292289
male
yes
(Intercept)
-12577.62840
3076.25865
-4.088612
0.0000691
male
yes
bmi
1448.05010
95.95906
15.090290
0.0000000
Se construye una tabla más compleja con los valores de los parámetros de los modelos creados a partir de la estratificación.
reg02b <- insurance |>group_by(sex,smoker) |>do(tidy(cor.test(~charges+bmi, data = . )))kable(reg02b)
Tabla 4: Correlación de las variables IMC ~ Costos médicos individuales agrupado por su condición de fumador y el sexo de la persona.
sex
smoker
estimate
statistic
p.value
parameter
conf.low
conf.high
method
alternative
female
no
0.0750925
1.758017
0.0793060
545
-0.0087984
0.1579338
Pearson’s product-moment correlation
two.sided
female
yes
0.8459098
16.860505
0.0000000
113
0.7842804
0.8910077
Pearson’s product-moment correlation
two.sided
male
no
0.0959043
2.186493
0.0292289
515
0.0097493
0.1806458
Pearson’s product-moment correlation
two.sided
male
yes
0.7693554
15.090290
0.0000000
157
0.6971960
0.8260810
Pearson’s product-moment correlation
two.sided
Identificación de las variables más cor-relacionadas y nuevo modelo de regresión
Con los datos anteriores (Tabla 2, Tabla 3 y Tabla 4), es posible confirmar que la condición de fumado en las personas implica una mayor asociación entre el IMC y los costos médicos individuales. Por lo cual es importante detallar más en esta relación.
insurance |>drop_na(bmi,age) |>filter(smoker =="yes") |>cor.test(~charges+bmi, data = _ )
Pearson's product-moment correlation
data: charges and bmi
t = 22.496, df = 272, p-value < 2.2e-16
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
0.7606770 0.8442932
sample estimates:
cor
0.8064806
Figura 4: IMC ~ costos médicos individuales en dólares en personas fumadoras
reg03 <-lm(charges ~ bmi, data=dat.smoker)
Las estimaciones para los parámetros del modelo 3: el valor de la intersección \(( b= -1.3186576\times 10^{4})\) y el efecto estimado del IMC sobre el costo médico individual de los asegurados \((m=1473.1062547)\).
El resultados del coeficiente de correlación \(R=0.8064806\) y el coeficiente de determinación \(R^2 =0.650411\) sugieren un asociación muy alta de las variables.
Gráficos de diagnóstico
Es una buena idea producir también gráficos de diagnóstico para analizar los residuos del modelo y asegurarnos de que el modelo lineal sea apropiado para usar para los datos particulares con los que estamos trabajando.
influenceIndexPlot(reg03,id=TRUE)
Figura 5: Gráfico de diagnóstico
Gráficos de influencia
influencePlot(reg03, id=list(method="identify"))
Figura 6: Gráfico de influencia
Predicción de valores
Que sucedería con mis costos médicos individuales, sí fumo y además puedo presentar los siguientes IMC: 33, 28, 20.
---title: "Análisis de regresión lineal"author: "Omar E. Barrantes Sotela"date: 2022-09-07lang: esformat: html: code-fold: false code-tools: trueself-contained: trueeditor: visual---## IntroducciónEl análisis de regresión es un grupo de procesos estadísticos para determinar la relación entre las variables del conjunto de datos. Generalmente, el análisis de regresión se utiliza para determinar la relación entre las variables explicativas y respuesta del conjunto de datos.El análisis de regresión ayuda a comprender cómo cambian las variables respuesta cuando una de las variables explicativas cambia y otras variables se mantienen constantes. Esto ayuda a construir un modelo de regresión y, además, ayuda a pronosticar los valores con respecto a un cambio en una de las variables explicativas.Existen 4 tipos de técnicas de análisis de regresión:- regresión lineal,- regresión logística,- regresión logística multinomial y- regresión logística ordinal.En este caso se concentrará la atención en el primer tipo.# Demostración## Contexto de los datosPara este ejemplo, se usan los datos de una empresa aseguradora. Consiste en una base de datos de 1338 registros de personas ([descarga de los datos](https://drive.google.com/file/d/1EOSYAQqksn70clDAut3FqLbj0a0GMCM4/view?usp=sharing)).#### FormatoConsiste de 7 variables:| Variable | Descripción ||--------------|----------------------------------------------------------|| *age* | Edad del asegurado. || *sex* | Sexo del asegurado. || *bmi* | Índice de Masa Corporal de la persona. || *children* | Cantidad de hijos asegurados por el seguro médico. || *smoker* | Indicador si la persona fuma. || *region* | Región donde vive el asegurado en E.E.U.U.: northeast, southeast, southwest, northwest. || *charges* | Costos médicos individuales facturados por el seguro de salud. |Se procede a cargar los datos.```{r}#| label: datos.lecturalibrary(readr)#url <- "https://drive.google.com/file/d/1EOSYAQqksn70clDAut3FqLbj0a0GMCM4/view?usp=sharing"#download.file(url, destfile = "insurance.csv")insurance <-read_csv("insurance.csv")```## AEDSe realiza una AED para revisar las características de los datos a utilizar en el análisis.- Resumen estadístico```{r}#| label: resumen.datossummary(insurance)```Se procede a revisar la distribución de las variables edad y IMC.```{r}#| label: fig-boxplot#| fig-cap: Distribución de las variables#| fig-subcap: #| - Distribución de la Edad#| - Distribución de la IMC#| layout-ncol: 2library(ggplot2)ggplot(insurance, aes(x=age)) +geom_histogram(binwidth =10, colour="blue", fill="#5588EE") +labs(x="Edad", y="Frecuencia" ) +theme_classic()ggplot(insurance, aes(x=bmi)) +geom_histogram(binwidth =5, colour="#E69F00", fill="#FEBA4F") +labs(x="IMC", y="Frecuencia" ) +theme_classic()```## Modelo de regresión linealSe utilizan las siguientes librerías para el análisis de regresión.```{r}#| label: reglib#| message: falselibrary(car) # funciones para el ajuste de modelos de regresiónlibrary(visreg) # visualiza regresioneslibrary(lmtest) # prueba modelos linealeslibrary(corrplot) # gráfico correlacioneslibrary(corrgram) # más gráficos de correlaciones```Primer modelo se trata de asociar las variables edad e IMC.```{r}#| label: tbl-reg01.tab#| tbl-cap: Coeficentes de la correlación entre la edad y IMC.library(knitr)reg01 <-lm(age ~ bmi, data=insurance)summary(reg01)kable(reg01$coefficients)```Las estimaciones para los parámetros del modelo: el valor de la intersección $( b= `r reg01[[1]][1]`)$ y el efecto estimado de la edad sobre el IMC $(m=`r reg01[[1]][2]`)$.El resultados del coeficiente de correlación $R=`r cor(insurance$age,insurance$bmi)`$ y el coeficiente de determinación $R^2 =`r cor(insurance$age,insurance$bmi)^2`$ sugieren un asociación muy baja o nula de las variables.::: callout-important## Preguntas generadoras1. ¿Qué nos indica la baja asociación de las variables edad y imc?2. ¿Es posible otro tipo de relación entre otras variables?:::### Estratificación o nivelesLa creación de estratos o niveles puede ayudar a observar patrones de asociación de variables, que de otra manera son difíciles de notar. En este caso se examina entre subconjuntos según sexo y la condición de fumador del asegurado. La asociación de variables es IMC con respecto a el costo de atención médica.```{r}#| label: fig-plotfactor#| message: false#| layout-ncol: 2#| layout-nrow: 2#| fig-cap: Distribución de las variables#| fig-subcap: #| - Histograma IMC según el sexo#| - Histograma IMC según condición de fumador#| - Histograma costos médicos según el sexo#| - Histograma costos médicos según condición de fumadorhist.col <-c("#999999", "#E69F00", "#56B4E9")ggplot(insurance, aes(x=bmi, fill=sex, color=sex)) +geom_histogram(binwidth =5, position="identity", alpha=0.5) +labs(x="IMC", y="Frecuencia" ) +scale_color_manual(values=hist.col)+scale_fill_manual(values=hist.col) +theme_bw()ggplot(insurance, aes(x=bmi, fill=smoker, color=smoker)) +geom_histogram(binwidth =5,position="identity", alpha=0.5) +labs(x="IMC", y="Frecuencia" ) +scale_color_manual(values= hist.col)+scale_fill_manual(values= hist.col) +theme_bw()ggplot(insurance, aes(x=charges, fill=sex, color=sex)) +geom_histogram(binwidth =5000,position="identity", alpha=0.5) +labs(x="Prima del seguro médico", y="Frecuencia" ) +scale_color_manual(values= hist.col)+scale_fill_manual(values= hist.col) +theme_bw()ggplot(insurance, aes(x=charges, fill=smoker, color=smoker)) +geom_histogram(binwidth =5000,position="identity", alpha=0.5) +labs(x="Prima del seguro médico", y="Frecuencia" ) +scale_color_manual(values= hist.col)+scale_fill_manual(values= hist.col) +theme_bw()``````{r}#| label: fig-boxplot2#| fig-cap: Relación de las variables según niveles de estratificación#| fig-subcap: #| - Gráfico IMC por costos médicos individuales según condición de fumador.#| - Gráfico IMC por costos médicos individuales según el sexo.#| layout-ncol: 2ggplot(insurance, aes(x=bmi, y=charges, fill=smoker)) +geom_boxplot()+scale_fill_manual(values= hist.col) +labs(x="IMC", y="Costos médicos") +theme_bw()ggplot(insurance, aes(x=bmi, y=charges, fill=sex)) +geom_boxplot()+scale_fill_manual(values= hist.col) +labs(x="IMC", y="Costos médicos") +theme_bw()```### Análisis de correlación por estratos```{r}#| label: tbl-matcorr01#| tbl-cap: "Correlación de las variables IMC ~ Costos médicos individuales agrupado por su condición de fumador y el sexo de la persona."#| message: falselibrary(dplyr)library(tidyr)mat.corr <- insurance |>group_by(sex,smoker) |>summarise(r=cor(bmi,charges))kable(mat.corr)```También es posible obtener los coeficientes del modelo lineal según estrato.```{r}#| label: tbl-matcoeff#| tbl-cap: "Coeficientes de correlación de las variables IMC ~ costos médicos individuales agrupado por su condición de fumador y el sexo de la persona."library(broom)reg02 <- insurance |>group_by(sex,smoker) |>do(tidy(lm(charges~bmi, .)))kable(reg02)```Se construye una tabla más compleja con los valores de los parámetros de los modelos creados a partir de la estratificación.```{r}#| label: tbl-matcorr02#| tbl-cap: "Correlación de las variables IMC ~ Costos médicos individuales agrupado por su condición de fumador y el sexo de la persona."#| message: false#| reg02b <- insurance |>group_by(sex,smoker) |>do(tidy(cor.test(~charges+bmi, data = . )))kable(reg02b)```### Identificación de las variables más cor-relacionadas y nuevo modelo de regresiónCon los datos anteriores (@tbl-matcorr01, @tbl-matcoeff y @tbl-matcorr02), es posible confirmar que la condición de fumado en las personas implica una mayor asociación entre el IMC y los costos médicos individuales. Por lo cual es importante detallar más en esta relación.```{r}#| label: correlacioninsurance |>drop_na(bmi,age) |>filter(smoker =="yes") |>cor.test(~charges+bmi, data = _ )``````{r}#| label: fig-scatter02#| fig-cap: IMC ~ costos médicos individuales en dólares en personas fumadoraslibrary(ggplot2)library(ggpubr)dat.smoker <- insurance |>drop_na(bmi,age) |>filter(smoker =="yes")reg03.plot <-ggplot(dat.smoker, aes(x=bmi, y=charges))+geom_point() +geom_smooth(method="lm", col="blue") +stat_regline_equation(label.x =40, label.y =20000)+theme_bw() +labs(x ="IMC", y="Prima del seguro médico en dólares")reg03.plot``````{r}#| label: reg.model.03reg03 <-lm(charges ~ bmi, data=dat.smoker)```Las estimaciones para los parámetros del modelo 3: el valor de la intersección $( b= `r reg03[[1]][1]`)$ y el efecto estimado del IMC sobre el costo médico individual de los asegurados $(m=`r reg03[[1]][2]`)$.El resultados del coeficiente de correlación $R=`r cor(dat.smoker$bmi,dat.smoker$charges)`$ y el coeficiente de determinación $R^2 =`r cor(dat.smoker$bmi,dat.smoker$charges)^2`$ sugieren un asociación muy alta de las variables.### Gráficos de diagnósticoEs una buena idea producir también gráficos de diagnóstico para analizar los residuos del modelo y asegurarnos de que el modelo lineal sea apropiado para usar para los datos particulares con los que estamos trabajando.```{r}#| label: fig-influencia01#| fig-cap: Gráfico de diagnóstico#| message: false#| echo: true#| code-line-numbers: trueinfluenceIndexPlot(reg03,id=TRUE)```### Gráficos de influencia```{r}#| label: fig-influencia02#| fig-cap: Gráfico de influencia#| message: false#| echo: true#| code-line-numbers: trueinfluencePlot(reg03, id=list(method="identify"))```### Predicción de valoresQue sucedería con mis costos médicos individuales, sí fumo y además puedo presentar los siguientes IMC: 33, 28, 20.```{r}#| label: prediccionprediccion <-predict(reg03, newdata =data.frame(bmi=c(33,28,20)))prediccion```